{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import sys\n",
    "import seaborn as sns\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_325 = pd.read_excel(\"3-数据清洗后325样本数据.xlsx\", na_values=np.nan)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_325_corr = data_325[data_325.columns[2:]].corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "RON_corr = dict(data_325_corr.iloc[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "RON_corr = sorted(RON_corr.items(), key=lambda x: x[1], reverse=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('RON损失', 1.0),\n",
       " ('S-ZORB.FT_9302.PV', 0.3594070790303029),\n",
       " ('S-ZORB.CAL.CANGLIANG.PV', 0.3195417316313435),\n",
       " ('S-ZORB.LI_2104.DACA', 0.31951741227729086),\n",
       " ('S-ZORB.PDT_2104.PV', 0.3194412459848149),\n",
       " ('S-ZORB.FT_1504.TOTALIZERA.PV', 0.3061069287124234),\n",
       " ('S-ZORB.TE_5201.DACA', 0.3013085164385599),\n",
       " ('S-ZORB.FT_1503.TOTALIZERA.PV', 0.30121588089762213),\n",
       " ('S-ZORB.LT_3801.DACA', 0.30021313683017326),\n",
       " ('S-ZORB.LC_5001.PV', 0.2958247677443841),\n",
       " ('S-ZORB.CAL_H2.PV', 0.2901741749774067),\n",
       " ('S-ZORB.AT-0001.DACA.PV', 0.2780548835380038),\n",
       " ('S-ZORB.AT-0002.DACA.PV', 0.277238879638677),\n",
       " ('S-ZORB.PDI_1102.PV', 0.2760023576785639),\n",
       " ('S-ZORB.FC_1102.PV', 0.271922725896741),\n",
       " ('S-ZORB.PDI_2102.PV', 0.25692784609321867),\n",
       " ('S-ZORB.FC_5001.DACA', 0.2547375900467951),\n",
       " ('S-ZORB.PT_1501.PV', 0.2482679651295373),\n",
       " ('S-ZORB.TXE_2203A.DACA', 0.24671011532281484),\n",
       " ('S-ZORB.TXE_2202A.DACA', 0.24666290171102692),\n",
       " ('S-ZORB.PC_3501.DACA', 0.2315053023516191),\n",
       " ('S-ZORB.PC_1001A.PV', 0.23047504093930693),\n",
       " ('S-ZORB.AT-0005.DACA.PV', 0.22870839207757634),\n",
       " ('原料性质：饱和烃', 0.22786101194372982),\n",
       " ('S-ZORB.TE_2301.PV', 0.22632756730113604),\n",
       " ('S-ZORB.PDT_3601.DACA', 0.21862512173848606),\n",
       " ('S-ZORB.FC_2702.DACA', 0.2150792949122276),\n",
       " ('S-ZORB.PC_9002.DACA', 0.20998014022870776),\n",
       " ('S-ZORB.PT_1602A.PV', 0.20961702763656515),\n",
       " ('S-ZORB.PDT_1002.DACA', 0.20483299620193093),\n",
       " ('S-ZORB.PDT_3503.DACA', 0.20066013807784222),\n",
       " ('S-ZORB.FC_5103.DACA', 0.19409826862497612),\n",
       " ('S-ZORB.PT_6003.DACA', 0.1844337949724357),\n",
       " ('S-ZORB.TE_5202.PV', 0.18437401480306762),\n",
       " ('S-ZORB.TE_2104.DACA', 0.17139519831341968),\n",
       " ('S-ZORB.TE_1102.DACA.PV', 0.165267849615711),\n",
       " ('S-ZORB.LT_2101.DACA', 0.16253716800500598),\n",
       " ('S-ZORB.PDI_2703A.PV', 0.1498664052513051),\n",
       " ('S-ZORB.PDT_2704.DACA', 0.14791119312213435),\n",
       " ('S-ZORB.TE_1601.PV', 0.14440462189771694),\n",
       " ('S-ZORB.TC_1607.DACA', 0.1427134877765927),\n",
       " ('S-ZORB.TE_7108B.DACA', 0.13375677530626698),\n",
       " ('S-ZORB.TE_7106B.DACA', 0.1314296112256297),\n",
       " ('S-ZORB.TE_2401.DACA', 0.1305851164225289),\n",
       " ('S-ZORB.PT_7107B.DACA', 0.1279808830655149),\n",
       " ('S-ZORB.TE_2103.PV', 0.1269082701573267),\n",
       " ('S-ZORB.CAL.LINE.PV', 0.12329788231773357),\n",
       " ('原料性质：溴值', 0.11671199874766362),\n",
       " ('S-ZORB.PT_2901.DACA', 0.11408000037259386),\n",
       " ('S-ZORB.SIS_PT_6007.PV', 0.113524708510829),\n",
       " ('S-ZORB.TE_5008.DACA', 0.11288138249148826),\n",
       " ('S-ZORB.PT_9403.PV', 0.11275082657917898),\n",
       " ('S-ZORB.FT_1204.DACA.PV', 0.11274239598923164),\n",
       " ('S-ZORB.PT_7103B.DACA', 0.10482509791598138),\n",
       " ('S-ZORB.PT_5201.DACA', 0.1015108827790286),\n",
       " ('S-ZORB.PDT_3002.DACA', 0.10043552951386786),\n",
       " ('S-ZORB.PC_5101.PV', 0.09807280475489501),\n",
       " ('S-ZORB.LT_9101.DACA', 0.09067760346108261),\n",
       " ('S-ZORB.PDT_2606.DACA', 0.08801593099530565),\n",
       " ('S-ZORB.TE_6001.DACA', 0.08411218291279998),\n",
       " ('S-ZORB.TE_1605.DACA', 0.08083267829515871),\n",
       " ('S-ZORB.PT_6006.DACA', 0.08069384896408476),\n",
       " ('S-ZORB.FT_3701.DACA', 0.07687774156682424),\n",
       " ('S-ZORB.TXE_3202A.DACA', 0.0711869792109372),\n",
       " ('S-ZORB.TXE_3201A.DACA', 0.0647766738490287),\n",
       " ('S-ZORB.SIS_TE_2606.PV', 0.0550066880302667),\n",
       " ('S-ZORB.FT_2431.DACA', 0.04965969068582465),\n",
       " ('S-ZORB.TC_2607.PV', 0.047860628581770814),\n",
       " ('S-ZORB.TE_2003.DACA', 0.04525986590694542),\n",
       " ('S-ZORB.TE_2002.DACA', 0.04081410084264835),\n",
       " ('S-ZORB.TE_5006.DACA', 0.038106456425006964),\n",
       " ('S-ZORB.TC_5005.PV', 0.02937200673596701),\n",
       " ('S-ZORB.PT_1102.DACA', 0.027383642084600635),\n",
       " ('S-ZORB.PT_1604.DACA', 0.022353835285764012),\n",
       " ('S-ZORB.LI_9102.DACA', 0.02067315240942256),\n",
       " ('S-ZORB.TE_5102.PV', 0.019819734158371946),\n",
       " ('S-ZORB.PDT_1004.DACA', 0.01957721956960743),\n",
       " ('S-ZORB.TE_2604.DACA', 0.019145153918961356),\n",
       " ('S-ZORB.SIS_TE_2605.PV', 0.019076062435079873),\n",
       " ('S-ZORB.LT_3101.DACA', 0.017834931653882637),\n",
       " ('S-ZORB.TE_5003.DACA', 0.015290037099315647),\n",
       " ('S-ZORB.PT_2801.PV', 0.014502299816070199),\n",
       " ('S-ZORB.TE_5004.DACA', 0.011384425545082481),\n",
       " ('待生吸附剂性质：S', 0.00927577410859538),\n",
       " ('S-ZORB.TE_1608.PV', 0.008843361224234743),\n",
       " ('S-ZORB.SIS_TE_6009.PV', 0.006526676946606415),\n",
       " ('S-ZORB.PT_9401.PV', 0.004860330239177419),\n",
       " ('S-ZORB.PT_1601.DACA', 0.001707831758407191),\n",
       " ('S-ZORB.TE_9301.PV', 0.0008551620803599832),\n",
       " ('S-ZORB.TE_2005.PV', -0.0027367705819765996),\n",
       " ('S-ZORB.TE_2004.DACA', -0.003004105440560897),\n",
       " ('S-ZORB.TE_6002.DACA', -0.007341891125083413),\n",
       " ('S-ZORB.PT_1101.DACA', -0.014067224287991958),\n",
       " ('S-ZORB.PT_6009.DACA', -0.01663468284726158),\n",
       " ('S-ZORB.PC_1301.PV', -0.01826604333710109),\n",
       " ('S-ZORB.TE_6008.DACA', -0.02271084795069482),\n",
       " ('S-ZORB.AC_6001.PV', -0.033984385542797806),\n",
       " ('原料性质：辛烷值', -0.03659090253178292),\n",
       " ('S-ZORB.PDT_3502.DACA', -0.036933690708002925),\n",
       " ('S-ZORB.PT_7505B.DACA', -0.03897641298049327),\n",
       " ('S-ZORB.TE_1501.DACA', -0.04012691979630782),\n",
       " ('S-ZORB.LC_5102.DACA', -0.04225199226104218),\n",
       " ('S-ZORB.LC_5102.PIDA.PV', -0.04244329822617364),\n",
       " ('S-ZORB.PT_7503B.DACA', -0.04878407861146759),\n",
       " ('S-ZORB.TE_2902.DACA', -0.051158002789832756),\n",
       " ('S-ZORB.TE_1502.DACA', -0.05479002416324695),\n",
       " ('S-ZORB.FT_9202.PV', -0.05596490645555145),\n",
       " ('再生吸附剂性质：焦炭', -0.05672641807456995),\n",
       " ('S-ZORB.TE_2501.DACA', -0.05675188729409778),\n",
       " ('再生吸附剂性质：S', -0.05875790400741909),\n",
       " ('S-ZORB.TE_5009.DACA', -0.05944036468771802),\n",
       " ('原料性质：芳烃', -0.0608612182274977),\n",
       " ('S-ZORB.TE_5101.DACA', -0.06422961148978228),\n",
       " ('S-ZORB.PT_2101.PV', -0.06521102562351905),\n",
       " ('S-ZORB.PT_2301.PV', -0.06622225030936965),\n",
       " ('S-ZORB.LT_2901.DACA', -0.06914233742964841),\n",
       " ('S-ZORB.TE_9003.DACA', -0.07343428877647445),\n",
       " ('S-ZORB.TE_9001.PV', -0.07471764249321325),\n",
       " ('S-ZORB.TE_7504B.DACA', -0.08170234295057675),\n",
       " ('S-ZORB.FT_9001.TOTAL', -0.08589788507720619),\n",
       " ('S-ZORB.FC_1005.PV', -0.08667237415511708),\n",
       " ('S-ZORB.FT_5101.TOTAL', -0.08677126583107367),\n",
       " ('S-ZORB.FC_1101.TOTAL', -0.0915213598874793),\n",
       " ('S-ZORB.PC_1202.PV', -0.09486274668360388),\n",
       " ('S-ZORB.TE_7508B.DACA', -0.09838948528159644),\n",
       " ('S-ZORB.PT_1103.DACA', -0.10358118821004211),\n",
       " ('原料性质：密度', -0.10669343144138563),\n",
       " ('S-ZORB.PT_1201.PV', -0.10687759414849762),\n",
       " ('S-ZORB.FT_9302.TOTAL', -0.10709223022822006),\n",
       " ('S-ZORB.FT_1001.TOTAL', -0.11245303384283656),\n",
       " ('S-ZORB.FT_5201.TOTAL', -0.11263541874520655),\n",
       " ('S-ZORB.TE_7506B.DACA', -0.11305635545612554),\n",
       " ('S-ZORB.TE_1503.DACA', -0.11329497413517337),\n",
       " ('S-ZORB.PDC_2702.DACA', -0.11464086246472908),\n",
       " ('S-ZORB.TE_3101.DACA', -0.11483394263559663),\n",
       " ('S-ZORB.TE_7502B.DACA', -0.11557685548350823),\n",
       " ('S-ZORB.FT_9202.TOTAL', -0.1175526212370883),\n",
       " ('S-ZORB.TE_1203.PV', -0.12315432646252776),\n",
       " ('S-ZORB.TE_9002.DACA', -0.12337811883903699),\n",
       " ('S-ZORB.TE_2901.DACA', -0.12461225021648417),\n",
       " ('S-ZORB.FT_9403.PV', -0.12539688295469167),\n",
       " ('S-ZORB.FT_9401.TOTAL', -0.12635214449453291),\n",
       " ('S-ZORB.FT_5101.PV', -0.12739350668324806),\n",
       " ('S-ZORB.FC_2601.PV', -0.1453865278217371),\n",
       " ('S-ZORB.PDT_2604.PV', -0.15056279269862746),\n",
       " ('原料性质：硫含量', -0.15492341987801606),\n",
       " ('待生吸附剂性质：焦炭', -0.15961888365506713),\n",
       " ('S-ZORB.BS_LT_2401.PV', -0.16256921725187723),\n",
       " ('S-ZORB.FT_2433.DACA', -0.16375036349114566),\n",
       " ('S-ZORB.PT_9402.PV', -0.16832904359544615),\n",
       " ('S-ZORB.FT_9403.TOTAL', -0.17073475039780495),\n",
       " ('S-ZORB.FT_9201.TOTAL', -0.1792790204359457),\n",
       " ('S-ZORB.FT_9301.TOTAL', -0.18439564956112137),\n",
       " ('原料性质：烯烃', -0.18765934537045034),\n",
       " ('S-ZORB.PC_2105.PV', -0.1879214427968404),\n",
       " ('S-ZORB.PT_2603.DACA', -0.19049405779490258),\n",
       " ('S-ZORB.SIS_FT_3202.PV', -0.19052815497049477),\n",
       " ('S-ZORB.PT_2106.DACA', -0.19086765345041604),\n",
       " ('S-ZORB.FT_3301.TOTAL', -0.19254196810154614),\n",
       " ('S-ZORB.PDC_2502.PV', -0.19332570799555493),\n",
       " ('S-ZORB.FT_9402.PV', -0.1935098800585283),\n",
       " ('S-ZORB.PT_6005.DACA', -0.19727305352175578),\n",
       " ('S-ZORB.FT_9001.PV', -0.19866778278137767),\n",
       " ('S-ZORB.PT_6002.PV', -0.19882370472957503),\n",
       " ('S-ZORB.PC_3101.DACA', -0.19920224041724977),\n",
       " ('S-ZORB.PT_2501.DACA', -0.19934638277649708),\n",
       " ('S-ZORB.FT_9402.TOTAL', -0.20623453682516735),\n",
       " ('S-ZORB.TE_5002.DACA', -0.20713109707321495),\n",
       " ('S-ZORB.AT-0006.DACA.PV', -0.20752138258071245),\n",
       " ('S-ZORB.PDT_2001.DACA', -0.20875494529620764),\n",
       " ('S-ZORB.TE_2601.PV', -0.21083135236893283),\n",
       " ('S-ZORB.FT_9101.TOTAL', -0.21085010160287512),\n",
       " ('S-ZORB.PDI_2903.DACA', -0.2133053124524788),\n",
       " ('S-ZORB.AT-0007.DACA.PV', -0.21619796577927594),\n",
       " ('S-ZORB.AT-0009.DACA.PV', -0.21641773884696774),\n",
       " ('S-ZORB.TE_1201.PV', -0.21774330346538853),\n",
       " ('S-ZORB.TC_2702.DACA', -0.22191896427339197),\n",
       " ('S-ZORB.TE_1105.PV', -0.22212805929172194),\n",
       " ('S-ZORB.AT-0011.DACA.PV', -0.22264900085993714),\n",
       " ('S-ZORB.AT-0004.DACA.PV', -0.22325088145550206),\n",
       " ('S-ZORB.AT-0008.DACA.PV', -0.22506569468434764),\n",
       " ('S-ZORB.FT_3303.DACA', -0.2272532484948421),\n",
       " ('S-ZORB.FT_3301.PV', -0.22952649977940226),\n",
       " ('S-ZORB.TE_1101.DACA', -0.231060371086551),\n",
       " ('S-ZORB.PT_2502.DACA', -0.235346281695466),\n",
       " ('产品性质：硫含量', -0.23787821853183336),\n",
       " ('S-ZORB.TE_2603.DACA', -0.23800796058080242),\n",
       " ('S-ZORB.ZT_2634.DACA', -0.24176116314969334),\n",
       " ('S-ZORB.FT_2701.DACA', -0.24268110734782442),\n",
       " ('S-ZORB.PDI_2105.DACA', -0.2474395643408618),\n",
       " ('S-ZORB.FC_2801.PV', -0.24821297310380552),\n",
       " ('S-ZORB.PDT_1003.DACA', -0.2490705725594176),\n",
       " ('S-ZORB.PC_1603.PV', -0.2558884081551451),\n",
       " ('S-ZORB.FT_1204.TOTAL', -0.256314411093851),\n",
       " ('产品性质：辛烷值', -0.2647790278283664),\n",
       " ('S-ZORB.PT_6008.DACA', -0.279067561812246),\n",
       " ('S-ZORB.TE_1106.DACA', -0.2899374840694373),\n",
       " ('S-ZORB.SIS_TE_2802', -0.2911863880343874),\n",
       " ('S-ZORB.TC_2801.PV', -0.31851820602040654),\n",
       " ('S-ZORB.CAL.SPEED.PV', -0.3203618025064861),\n",
       " ('S-ZORB.LC_5101.PV', -0.337434141983431)]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "RON_corr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>样本编号</th>\n",
       "      <th>时间</th>\n",
       "      <th>RON损失</th>\n",
       "      <th>原料性质：硫含量</th>\n",
       "      <th>原料性质：辛烷值</th>\n",
       "      <th>原料性质：饱和烃</th>\n",
       "      <th>原料性质：烯烃</th>\n",
       "      <th>原料性质：芳烃</th>\n",
       "      <th>原料性质：溴值</th>\n",
       "      <th>原料性质：密度</th>\n",
       "      <th>...</th>\n",
       "      <th>S-ZORB.AT-0011.DACA.PV</th>\n",
       "      <th>S-ZORB.FT_1204.DACA.PV</th>\n",
       "      <th>S-ZORB.LC_5102.PIDA.PV</th>\n",
       "      <th>S-ZORB.TE_1102.DACA.PV</th>\n",
       "      <th>S-ZORB.CAL.LINE.PV</th>\n",
       "      <th>S-ZORB.CAL.CANGLIANG.PV</th>\n",
       "      <th>S-ZORB.CAL.SPEED.PV</th>\n",
       "      <th>S-ZORB.FT_1503.TOTALIZERA.PV</th>\n",
       "      <th>S-ZORB.FT_1504.TOTALIZERA.PV</th>\n",
       "      <th>S-ZORB.PC_1001A.PV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2020/5/26 8:00:00</td>\n",
       "      <td>1.38</td>\n",
       "      <td>188.0</td>\n",
       "      <td>90.6</td>\n",
       "      <td>53.230000</td>\n",
       "      <td>24.400000</td>\n",
       "      <td>22.370000</td>\n",
       "      <td>61.487143</td>\n",
       "      <td>726.085714</td>\n",
       "      <td>...</td>\n",
       "      <td>0.496243</td>\n",
       "      <td>18.292067</td>\n",
       "      <td>42.015425</td>\n",
       "      <td>425.929515</td>\n",
       "      <td>0.282564</td>\n",
       "      <td>37.804650</td>\n",
       "      <td>3.324945</td>\n",
       "      <td>39063124.5</td>\n",
       "      <td>39608757.0</td>\n",
       "      <td>0.353271</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2020/5/21 8:00:00</td>\n",
       "      <td>1.18</td>\n",
       "      <td>169.0</td>\n",
       "      <td>90.5</td>\n",
       "      <td>52.300000</td>\n",
       "      <td>26.400000</td>\n",
       "      <td>21.300000</td>\n",
       "      <td>61.880000</td>\n",
       "      <td>731.300000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.491385</td>\n",
       "      <td>19.842605</td>\n",
       "      <td>40.903878</td>\n",
       "      <td>421.534365</td>\n",
       "      <td>0.281381</td>\n",
       "      <td>37.876006</td>\n",
       "      <td>3.321169</td>\n",
       "      <td>38810581.5</td>\n",
       "      <td>39389299.0</td>\n",
       "      <td>0.354504</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2020/5/19 8:00:00</td>\n",
       "      <td>1.38</td>\n",
       "      <td>177.0</td>\n",
       "      <td>90.7</td>\n",
       "      <td>52.300000</td>\n",
       "      <td>26.314286</td>\n",
       "      <td>21.385714</td>\n",
       "      <td>61.722857</td>\n",
       "      <td>729.614286</td>\n",
       "      <td>...</td>\n",
       "      <td>0.495483</td>\n",
       "      <td>26.994896</td>\n",
       "      <td>42.103142</td>\n",
       "      <td>425.258420</td>\n",
       "      <td>0.282277</td>\n",
       "      <td>37.907927</td>\n",
       "      <td>3.319569</td>\n",
       "      <td>38693812.0</td>\n",
       "      <td>39312616.5</td>\n",
       "      <td>0.350181</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2020/5/14 8:00:00</td>\n",
       "      <td>1.38</td>\n",
       "      <td>159.0</td>\n",
       "      <td>90.4</td>\n",
       "      <td>52.300000</td>\n",
       "      <td>26.100000</td>\n",
       "      <td>21.600000</td>\n",
       "      <td>61.330000</td>\n",
       "      <td>725.400000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.490180</td>\n",
       "      <td>26.324458</td>\n",
       "      <td>41.970416</td>\n",
       "      <td>424.406195</td>\n",
       "      <td>0.282275</td>\n",
       "      <td>39.177396</td>\n",
       "      <td>3.210211</td>\n",
       "      <td>38410862.5</td>\n",
       "      <td>39120204.5</td>\n",
       "      <td>0.353930</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2020/5/12 8:00:00</td>\n",
       "      <td>1.28</td>\n",
       "      <td>173.0</td>\n",
       "      <td>89.6</td>\n",
       "      <td>52.242857</td>\n",
       "      <td>26.671429</td>\n",
       "      <td>21.085714</td>\n",
       "      <td>61.332857</td>\n",
       "      <td>725.428571</td>\n",
       "      <td>...</td>\n",
       "      <td>0.501194</td>\n",
       "      <td>30.224367</td>\n",
       "      <td>42.900094</td>\n",
       "      <td>428.514740</td>\n",
       "      <td>0.282963</td>\n",
       "      <td>39.508370</td>\n",
       "      <td>3.178832</td>\n",
       "      <td>38283000.0</td>\n",
       "      <td>39045953.5</td>\n",
       "      <td>0.358053</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 203 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   样本编号                 时间  RON损失  原料性质：硫含量  原料性质：辛烷值   原料性质：饱和烃    原料性质：烯烃  \\\n",
       "0     1  2020/5/26 8:00:00   1.38     188.0      90.6  53.230000  24.400000   \n",
       "1     2  2020/5/21 8:00:00   1.18     169.0      90.5  52.300000  26.400000   \n",
       "2     3  2020/5/19 8:00:00   1.38     177.0      90.7  52.300000  26.314286   \n",
       "3     4  2020/5/14 8:00:00   1.38     159.0      90.4  52.300000  26.100000   \n",
       "4     5  2020/5/12 8:00:00   1.28     173.0      89.6  52.242857  26.671429   \n",
       "\n",
       "     原料性质：芳烃    原料性质：溴值     原料性质：密度  ...  S-ZORB.AT-0011.DACA.PV  \\\n",
       "0  22.370000  61.487143  726.085714  ...                0.496243   \n",
       "1  21.300000  61.880000  731.300000  ...                0.491385   \n",
       "2  21.385714  61.722857  729.614286  ...                0.495483   \n",
       "3  21.600000  61.330000  725.400000  ...                0.490180   \n",
       "4  21.085714  61.332857  725.428571  ...                0.501194   \n",
       "\n",
       "   S-ZORB.FT_1204.DACA.PV  S-ZORB.LC_5102.PIDA.PV  S-ZORB.TE_1102.DACA.PV  \\\n",
       "0               18.292067               42.015425              425.929515   \n",
       "1               19.842605               40.903878              421.534365   \n",
       "2               26.994896               42.103142              425.258420   \n",
       "3               26.324458               41.970416              424.406195   \n",
       "4               30.224367               42.900094              428.514740   \n",
       "\n",
       "   S-ZORB.CAL.LINE.PV  S-ZORB.CAL.CANGLIANG.PV  S-ZORB.CAL.SPEED.PV  \\\n",
       "0            0.282564                37.804650             3.324945   \n",
       "1            0.281381                37.876006             3.321169   \n",
       "2            0.282277                37.907927             3.319569   \n",
       "3            0.282275                39.177396             3.210211   \n",
       "4            0.282963                39.508370             3.178832   \n",
       "\n",
       "   S-ZORB.FT_1503.TOTALIZERA.PV  S-ZORB.FT_1504.TOTALIZERA.PV  \\\n",
       "0                    39063124.5                    39608757.0   \n",
       "1                    38810581.5                    39389299.0   \n",
       "2                    38693812.0                    39312616.5   \n",
       "3                    38410862.5                    39120204.5   \n",
       "4                    38283000.0                    39045953.5   \n",
       "\n",
       "   S-ZORB.PC_1001A.PV  \n",
       "0            0.353271  \n",
       "1            0.354504  \n",
       "2            0.350181  \n",
       "3            0.353930  \n",
       "4            0.358053  \n",
       "\n",
       "[5 rows x 203 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_325.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "from sklearn.feature_selection import RFE\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "# Build a classification task using 3 informative features\n",
    "X, y = data_325[ data_325.columns[3:] ], data_325[ data_325.columns[2] ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "X.drop(['产品性质：硫含量', '产品性质：辛烷值'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>原料性质：硫含量</th>\n",
       "      <th>原料性质：辛烷值</th>\n",
       "      <th>原料性质：饱和烃</th>\n",
       "      <th>原料性质：烯烃</th>\n",
       "      <th>原料性质：芳烃</th>\n",
       "      <th>原料性质：溴值</th>\n",
       "      <th>原料性质：密度</th>\n",
       "      <th>待生吸附剂性质：焦炭</th>\n",
       "      <th>待生吸附剂性质：S</th>\n",
       "      <th>再生吸附剂性质：焦炭</th>\n",
       "      <th>...</th>\n",
       "      <th>S-ZORB.AT-0011.DACA.PV</th>\n",
       "      <th>S-ZORB.FT_1204.DACA.PV</th>\n",
       "      <th>S-ZORB.LC_5102.PIDA.PV</th>\n",
       "      <th>S-ZORB.TE_1102.DACA.PV</th>\n",
       "      <th>S-ZORB.CAL.LINE.PV</th>\n",
       "      <th>S-ZORB.CAL.CANGLIANG.PV</th>\n",
       "      <th>S-ZORB.CAL.SPEED.PV</th>\n",
       "      <th>S-ZORB.FT_1503.TOTALIZERA.PV</th>\n",
       "      <th>S-ZORB.FT_1504.TOTALIZERA.PV</th>\n",
       "      <th>S-ZORB.PC_1001A.PV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>188.0</td>\n",
       "      <td>90.6</td>\n",
       "      <td>53.230000</td>\n",
       "      <td>24.400000</td>\n",
       "      <td>22.370000</td>\n",
       "      <td>61.487143</td>\n",
       "      <td>726.085714</td>\n",
       "      <td>2.32</td>\n",
       "      <td>7.30</td>\n",
       "      <td>1.84</td>\n",
       "      <td>...</td>\n",
       "      <td>0.496243</td>\n",
       "      <td>18.292067</td>\n",
       "      <td>42.015425</td>\n",
       "      <td>425.929515</td>\n",
       "      <td>0.282564</td>\n",
       "      <td>37.804650</td>\n",
       "      <td>3.324945</td>\n",
       "      <td>39063124.5</td>\n",
       "      <td>39608757.0</td>\n",
       "      <td>0.353271</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>169.0</td>\n",
       "      <td>90.5</td>\n",
       "      <td>52.300000</td>\n",
       "      <td>26.400000</td>\n",
       "      <td>21.300000</td>\n",
       "      <td>61.880000</td>\n",
       "      <td>731.300000</td>\n",
       "      <td>2.37</td>\n",
       "      <td>7.34</td>\n",
       "      <td>0.55</td>\n",
       "      <td>...</td>\n",
       "      <td>0.491385</td>\n",
       "      <td>19.842605</td>\n",
       "      <td>40.903878</td>\n",
       "      <td>421.534365</td>\n",
       "      <td>0.281381</td>\n",
       "      <td>37.876006</td>\n",
       "      <td>3.321169</td>\n",
       "      <td>38810581.5</td>\n",
       "      <td>39389299.0</td>\n",
       "      <td>0.354504</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>177.0</td>\n",
       "      <td>90.7</td>\n",
       "      <td>52.300000</td>\n",
       "      <td>26.314286</td>\n",
       "      <td>21.385714</td>\n",
       "      <td>61.722857</td>\n",
       "      <td>729.614286</td>\n",
       "      <td>2.43</td>\n",
       "      <td>7.27</td>\n",
       "      <td>1.89</td>\n",
       "      <td>...</td>\n",
       "      <td>0.495483</td>\n",
       "      <td>26.994896</td>\n",
       "      <td>42.103142</td>\n",
       "      <td>425.258420</td>\n",
       "      <td>0.282277</td>\n",
       "      <td>37.907927</td>\n",
       "      <td>3.319569</td>\n",
       "      <td>38693812.0</td>\n",
       "      <td>39312616.5</td>\n",
       "      <td>0.350181</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>159.0</td>\n",
       "      <td>90.4</td>\n",
       "      <td>52.300000</td>\n",
       "      <td>26.100000</td>\n",
       "      <td>21.600000</td>\n",
       "      <td>61.330000</td>\n",
       "      <td>725.400000</td>\n",
       "      <td>3.08</td>\n",
       "      <td>7.35</td>\n",
       "      <td>0.98</td>\n",
       "      <td>...</td>\n",
       "      <td>0.490180</td>\n",
       "      <td>26.324458</td>\n",
       "      <td>41.970416</td>\n",
       "      <td>424.406195</td>\n",
       "      <td>0.282275</td>\n",
       "      <td>39.177396</td>\n",
       "      <td>3.210211</td>\n",
       "      <td>38410862.5</td>\n",
       "      <td>39120204.5</td>\n",
       "      <td>0.353930</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>173.0</td>\n",
       "      <td>89.6</td>\n",
       "      <td>52.242857</td>\n",
       "      <td>26.671429</td>\n",
       "      <td>21.085714</td>\n",
       "      <td>61.332857</td>\n",
       "      <td>725.428571</td>\n",
       "      <td>2.45</td>\n",
       "      <td>6.58</td>\n",
       "      <td>0.83</td>\n",
       "      <td>...</td>\n",
       "      <td>0.501194</td>\n",
       "      <td>30.224367</td>\n",
       "      <td>42.900094</td>\n",
       "      <td>428.514740</td>\n",
       "      <td>0.282963</td>\n",
       "      <td>39.508370</td>\n",
       "      <td>3.178832</td>\n",
       "      <td>38283000.0</td>\n",
       "      <td>39045953.5</td>\n",
       "      <td>0.358053</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 198 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   原料性质：硫含量  原料性质：辛烷值   原料性质：饱和烃    原料性质：烯烃    原料性质：芳烃    原料性质：溴值     原料性质：密度  \\\n",
       "0     188.0      90.6  53.230000  24.400000  22.370000  61.487143  726.085714   \n",
       "1     169.0      90.5  52.300000  26.400000  21.300000  61.880000  731.300000   \n",
       "2     177.0      90.7  52.300000  26.314286  21.385714  61.722857  729.614286   \n",
       "3     159.0      90.4  52.300000  26.100000  21.600000  61.330000  725.400000   \n",
       "4     173.0      89.6  52.242857  26.671429  21.085714  61.332857  725.428571   \n",
       "\n",
       "   待生吸附剂性质：焦炭  待生吸附剂性质：S  再生吸附剂性质：焦炭  ...  S-ZORB.AT-0011.DACA.PV  \\\n",
       "0        2.32       7.30        1.84  ...                0.496243   \n",
       "1        2.37       7.34        0.55  ...                0.491385   \n",
       "2        2.43       7.27        1.89  ...                0.495483   \n",
       "3        3.08       7.35        0.98  ...                0.490180   \n",
       "4        2.45       6.58        0.83  ...                0.501194   \n",
       "\n",
       "   S-ZORB.FT_1204.DACA.PV  S-ZORB.LC_5102.PIDA.PV  S-ZORB.TE_1102.DACA.PV  \\\n",
       "0               18.292067               42.015425              425.929515   \n",
       "1               19.842605               40.903878              421.534365   \n",
       "2               26.994896               42.103142              425.258420   \n",
       "3               26.324458               41.970416              424.406195   \n",
       "4               30.224367               42.900094              428.514740   \n",
       "\n",
       "   S-ZORB.CAL.LINE.PV  S-ZORB.CAL.CANGLIANG.PV  S-ZORB.CAL.SPEED.PV  \\\n",
       "0            0.282564                37.804650             3.324945   \n",
       "1            0.281381                37.876006             3.321169   \n",
       "2            0.282277                37.907927             3.319569   \n",
       "3            0.282275                39.177396             3.210211   \n",
       "4            0.282963                39.508370             3.178832   \n",
       "\n",
       "   S-ZORB.FT_1503.TOTALIZERA.PV  S-ZORB.FT_1504.TOTALIZERA.PV  \\\n",
       "0                    39063124.5                    39608757.0   \n",
       "1                    38810581.5                    39389299.0   \n",
       "2                    38693812.0                    39312616.5   \n",
       "3                    38410862.5                    39120204.5   \n",
       "4                    38283000.0                    39045953.5   \n",
       "\n",
       "   S-ZORB.PC_1001A.PV  \n",
       "0            0.353271  \n",
       "1            0.354504  \n",
       "2            0.350181  \n",
       "3            0.353930  \n",
       "4            0.358053  \n",
       "\n",
       "[5 rows x 198 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(325, 198)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['原料性质：硫含量', '原料性质：辛烷值', '原料性质：饱和烃', '原料性质：烯烃', '原料性质：芳烃', '原料性质：溴值',\n",
       "       '原料性质：密度', '待生吸附剂性质：焦炭', '待生吸附剂性质：S', '再生吸附剂性质：焦炭', '再生吸附剂性质：S',\n",
       "       'S-ZORB.CAL_H2.PV', 'S-ZORB.PDI_2102.PV', 'S-ZORB.PT_2801.PV',\n",
       "       'S-ZORB.FC_2801.PV'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.columns[:15]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1.38\n",
       "1    1.18\n",
       "2    1.38\n",
       "3    1.38\n",
       "4    1.28\n",
       "Name: RON损失, dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import mean_squared_error as MSE\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.metrics import mean_absolute_error #平方绝对误差\n",
    "from sklearn.metrics import r2_score#R square"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.24324307340338058\n",
      "Index(['原料性质：饱和烃', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV', 'S-ZORB.TE_5202.PV',\n",
      "       'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV', 'S-ZORB.PC_1603.PV',\n",
      "       'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV', 'S-ZORB.TE_1106.DACA',\n",
      "       'S-ZORB.LI_9102.DACA', 'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA',\n",
      "       'S-ZORB.PDT_1003.DACA', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.05434221428571397 0.23311416577658675 0.1675612244897948 -0.24324307340338058\n",
      "-0.06226917994727144\n",
      "Index(['原料性质：饱和烃', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV', 'S-ZORB.TE_5202.PV',\n",
      "       'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV', 'S-ZORB.PC_1603.PV',\n",
      "       'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV', 'S-ZORB.TE_1106.DACA',\n",
      "       'S-ZORB.LI_9102.DACA', 'S-ZORB.LI_2104.DACA', 'S-ZORB.TE_6002.DACA',\n",
      "       'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04643183673469346 0.21548047877868998 0.15430612244897846 -0.062269179947271436\n",
      "-0.08388472081246245\n",
      "Index(['原料性质：饱和烃', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV', 'S-ZORB.TE_5202.PV',\n",
      "       'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV', 'S-ZORB.PC_1603.PV',\n",
      "       'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV', 'S-ZORB.TE_1106.DACA',\n",
      "       'S-ZORB.LI_9102.DACA', 'S-ZORB.PDT_2704.DACA', 'S-ZORB.LI_2104.DACA',\n",
      "       'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA',\n",
      "       'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04737665306122424 0.21766178594605035 0.1593265306122445 -0.08388472081246245\n",
      "-0.043537672171859665\n",
      "Index(['原料性质：饱和烃', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV', 'S-ZORB.TE_5202.PV',\n",
      "       'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV', 'S-ZORB.PC_1603.PV',\n",
      "       'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV', 'S-ZORB.TE_1106.DACA',\n",
      "       'S-ZORB.LI_9102.DACA', 'S-ZORB.PDT_2704.DACA', 'S-ZORB.LI_2104.DACA',\n",
      "       'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA',\n",
      "       'S-ZORB.AT-0009.DACA.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.045613081632652624 0.2135721930229978 0.15534693877550887 -0.043537672171859665\n",
      "-0.04685008479213337\n",
      "Index(['原料性质：饱和烃', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV', 'S-ZORB.TE_5202.PV',\n",
      "       'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV', 'S-ZORB.PC_1603.PV',\n",
      "       'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV', 'S-ZORB.TE_1106.DACA',\n",
      "       'S-ZORB.LI_9102.DACA', 'S-ZORB.LT_3801.DACA', 'S-ZORB.PDT_2704.DACA',\n",
      "       'S-ZORB.LI_2104.DACA', 'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA',\n",
      "       'S-ZORB.PDT_1003.DACA', 'S-ZORB.AT-0009.DACA.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04575786734693846 0.2139108864619528 0.15841836734693795 -0.04685008479213337\n",
      "0.05409760993141144\n",
      "Index(['原料性质：饱和烃', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV',\n",
      "       'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA', 'S-ZORB.LT_3801.DACA',\n",
      "       'S-ZORB.PDT_2704.DACA', 'S-ZORB.LI_2104.DACA', 'S-ZORB.TE_6002.DACA',\n",
      "       'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA', 'S-ZORB.AT-0009.DACA.PV',\n",
      "       'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04134543877550991 0.203335778395023 0.15288775510204022 0.05409760993141144\n",
      "0.010581019663817082\n",
      "Index(['原料性质：饱和烃', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV',\n",
      "       'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA', 'S-ZORB.LT_3801.DACA',\n",
      "       'S-ZORB.FT_3303.DACA', 'S-ZORB.PDT_2704.DACA', 'S-ZORB.LI_2104.DACA',\n",
      "       'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA',\n",
      "       'S-ZORB.AT-0009.DACA.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04324755102040794 0.20796045542460215 0.1552857142857135 0.010581019663817082\n",
      "-0.008669445984232915\n",
      "Index(['原料性质：饱和烃', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV',\n",
      "       'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA', 'S-ZORB.LT_3801.DACA',\n",
      "       'S-ZORB.FT_3303.DACA', 'S-ZORB.PDT_2704.DACA', 'S-ZORB.LI_2104.DACA',\n",
      "       'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA',\n",
      "       'S-ZORB.TE_7504B.DACA', 'S-ZORB.AT-0009.DACA.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04408898979591817 0.2099737835919479 0.15403061224489745 -0.008669445984232915\n",
      "-0.09236523482025727\n",
      "Index(['原料性质：饱和烃', '原料性质：溴值', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV',\n",
      "       'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA', 'S-ZORB.LT_3801.DACA',\n",
      "       'S-ZORB.FT_3303.DACA', 'S-ZORB.PDT_2704.DACA', 'S-ZORB.LI_2104.DACA',\n",
      "       'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA',\n",
      "       'S-ZORB.TE_7504B.DACA', 'S-ZORB.AT-0009.DACA.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04774733673469367 0.21851163981512214 0.1621938775510197 -0.09236523482025727\n",
      "0.005429960077780183\n",
      "Index(['原料性质：饱和烃', '原料性质：溴值', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV',\n",
      "       'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA', 'S-ZORB.LT_3801.DACA',\n",
      "       'S-ZORB.FT_3303.DACA', 'S-ZORB.LT_2101.DACA', 'S-ZORB.PDT_2704.DACA',\n",
      "       'S-ZORB.LI_2104.DACA', 'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA',\n",
      "       'S-ZORB.PDT_1003.DACA', 'S-ZORB.TE_7504B.DACA',\n",
      "       'S-ZORB.AT-0009.DACA.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04347270408163242 0.20850108892193445 0.15462244897959115 0.005429960077780183\n",
      "0.04822495844959118\n",
      "Index(['原料性质：饱和烃', '原料性质：溴值', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PDI_1102.PV', 'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV',\n",
      "       'S-ZORB.TC_2801.PV', 'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA',\n",
      "       'S-ZORB.LT_3801.DACA', 'S-ZORB.FT_3303.DACA', 'S-ZORB.LT_2101.DACA',\n",
      "       'S-ZORB.PDT_2704.DACA', 'S-ZORB.LI_2104.DACA', 'S-ZORB.TE_6002.DACA',\n",
      "       'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA', 'S-ZORB.TE_7504B.DACA',\n",
      "       'S-ZORB.AT-0009.DACA.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04160213265306095 0.20396600857265643 0.15127551020408112 0.04822495844959118\n",
      "-0.06049263050472953\n",
      "Index(['原料性质：饱和烃', '原料性质：溴值', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PDI_1102.PV', 'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV',\n",
      "       'S-ZORB.TC_2801.PV', 'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA',\n",
      "       'S-ZORB.LT_3801.DACA', 'S-ZORB.FT_3303.DACA', 'S-ZORB.LT_2101.DACA',\n",
      "       'S-ZORB.PDT_2704.DACA', 'S-ZORB.LI_2104.DACA', 'S-ZORB.TE_6002.DACA',\n",
      "       'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA', 'S-ZORB.TE_7504B.DACA',\n",
      "       'S-ZORB.AT-0008.DACA.PV', 'S-ZORB.AT-0009.DACA.PV',\n",
      "       'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.046354183673469086 0.21530021754162043 0.1552448979591826 -0.06049263050472953\n",
      "-0.15130722337504499\n",
      "Index(['原料性质：饱和烃', '原料性质：溴值', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PDI_1102.PV', 'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV',\n",
      "       'S-ZORB.TC_2801.PV', 'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA',\n",
      "       'S-ZORB.LT_3801.DACA', 'S-ZORB.FT_3303.DACA', 'S-ZORB.LT_2101.DACA',\n",
      "       'S-ZORB.PDT_2704.DACA', 'S-ZORB.PDC_2702.DACA', 'S-ZORB.LI_2104.DACA',\n",
      "       'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA',\n",
      "       'S-ZORB.TE_7504B.DACA', 'S-ZORB.AT-0008.DACA.PV',\n",
      "       'S-ZORB.AT-0009.DACA.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.050323693877550736 0.22432943159012983 0.15865306122448927 -0.15130722337504499\n",
      "-0.08070864260407684\n",
      "Index(['原料性质：饱和烃', '原料性质：溴值', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PDI_1102.PV', 'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV',\n",
      "       'S-ZORB.TC_2801.PV', 'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA',\n",
      "       'S-ZORB.TE_9002.DACA', 'S-ZORB.LT_3801.DACA', 'S-ZORB.FT_3303.DACA',\n",
      "       'S-ZORB.LT_2101.DACA', 'S-ZORB.PDT_2704.DACA', 'S-ZORB.PDC_2702.DACA',\n",
      "       'S-ZORB.LI_2104.DACA', 'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA',\n",
      "       'S-ZORB.PDT_1003.DACA', 'S-ZORB.TE_7504B.DACA',\n",
      "       'S-ZORB.AT-0008.DACA.PV', 'S-ZORB.AT-0009.DACA.PV',\n",
      "       'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04723782653061201 0.2173426477491521 0.15537755102040807 -0.08070864260407684\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.05118267100818685\n",
      "Index(['原料性质：饱和烃', '原料性质：溴值', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.TE_2103.PV',\n",
      "       'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV', 'S-ZORB.PT_9402.PV',\n",
      "       'S-ZORB.PDI_1102.PV', 'S-ZORB.PC_1603.PV', 'S-ZORB.TE_1201.PV',\n",
      "       'S-ZORB.TC_2801.PV', 'S-ZORB.PT_1103.DACA', 'S-ZORB.TE_1106.DACA',\n",
      "       'S-ZORB.LI_9102.DACA', 'S-ZORB.TE_9002.DACA', 'S-ZORB.LT_3801.DACA',\n",
      "       'S-ZORB.FT_3303.DACA', 'S-ZORB.LT_2101.DACA', 'S-ZORB.PDT_2704.DACA',\n",
      "       'S-ZORB.PDC_2702.DACA', 'S-ZORB.LI_2104.DACA', 'S-ZORB.TE_6002.DACA',\n",
      "       'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA', 'S-ZORB.TE_7504B.DACA',\n",
      "       'S-ZORB.AT-0008.DACA.PV', 'S-ZORB.AT-0009.DACA.PV',\n",
      "       'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04594724489795878 0.21435308464764108 0.15863265306122373 -0.05118267100818685\n",
      "-0.09673914156868002\n",
      "Index(['原料性质：饱和烃', '原料性质：溴值', '原料性质：密度', '再生吸附剂性质：S', 'S-ZORB.PDI_2102.PV',\n",
      "       'S-ZORB.TE_2103.PV', 'S-ZORB.TE_5202.PV', 'S-ZORB.FT_9302.PV',\n",
      "       'S-ZORB.PT_9402.PV', 'S-ZORB.PDI_1102.PV', 'S-ZORB.PC_1603.PV',\n",
      "       'S-ZORB.TE_1201.PV', 'S-ZORB.TC_2801.PV', 'S-ZORB.PT_1103.DACA',\n",
      "       'S-ZORB.TE_1106.DACA', 'S-ZORB.LI_9102.DACA', 'S-ZORB.TE_9002.DACA',\n",
      "       'S-ZORB.LT_3801.DACA', 'S-ZORB.FT_3303.DACA', 'S-ZORB.LT_2101.DACA',\n",
      "       'S-ZORB.PDT_2704.DACA', 'S-ZORB.PDC_2702.DACA', 'S-ZORB.LI_2104.DACA',\n",
      "       'S-ZORB.TE_6002.DACA', 'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA',\n",
      "       'S-ZORB.TE_7504B.DACA', 'S-ZORB.AT-0008.DACA.PV',\n",
      "       'S-ZORB.AT-0009.DACA.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n",
      "0.04793852040816296 0.2189486707156793 0.16188775510204023 -0.09673914156868002\n"
     ]
    }
   ],
   "source": [
    "feature_list = []\n",
    "score_list = []\n",
    "for i in range(15, 31):\n",
    "    # Create the RFE object and compute a cross-validated score.\n",
    "    RFR = RandomForestRegressor(random_state=111)\n",
    "    # The \"accuracy\" scoring is proportional to the number of correct\n",
    "    rfe = RFE(estimator=RFR, step=1, n_features_to_select=i)\n",
    "    rfe.fit(x_train, y_train)\n",
    "    y_predict = rfe.predict(x_test)\n",
    "    print(rfe.score(x_test,y_test))\n",
    "    score_list.append(rfe.score(x_test,y_test))\n",
    "    # 输出选择特征\n",
    "    print(X.columns[ rfe.get_support() ])\n",
    "    feature_list.append(x_train.columns[ rfe.get_support() ])\n",
    "    # print(\"Optimal number of features : %d\" % rfe.n_features_)\n",
    "    mse_score = MSE(y_test, y_predict)\n",
    "    rmse_score = np.sqrt(mse_score)\n",
    "    mae_score = mean_absolute_error(y_test, y_predict)\n",
    "    rr_score = r2_score(y_test, y_predict)\n",
    "    print(mse_score, rmse_score, mae_score, rr_score)\n",
    "    # # Plot number of features VS. cross-validation scores\n",
    "#     plt.figure()\n",
    "#     plt.xlabel(\"Number of features selected\")\n",
    "#     plt.ylabel(\"Cross validation score (nb of correct classifications)\")\n",
    "#     plt.plot(range(1, len(rfe.grid_scores_) + 1), rfe.grid_scores_)\n",
    "#     plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "score_df = pd.DataFrame(score_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.243243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.062269</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.083885</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.043538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.046850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.054098</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.010581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.008669</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-0.092365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.005430</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.048225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>-0.060493</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>-0.151307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>-0.080709</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>-0.051183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>-0.096739</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           0\n",
       "0  -0.243243\n",
       "1  -0.062269\n",
       "2  -0.083885\n",
       "3  -0.043538\n",
       "4  -0.046850\n",
       "5   0.054098\n",
       "6   0.010581\n",
       "7  -0.008669\n",
       "8  -0.092365\n",
       "9   0.005430\n",
       "10  0.048225\n",
       "11 -0.060493\n",
       "12 -0.151307\n",
       "13 -0.080709\n",
       "14 -0.051183\n",
       "15 -0.096739"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(15, 8))\n",
    "plt.title(\"RFE分值变化曲线\")\n",
    "plt.plot(range(15, 31), score_list)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['原料性质：辛烷值', '原料性质：饱和烃', '待生吸附剂性质：焦炭', '再生吸附剂性质：S', 'S-ZORB.PC_5101.PV',\n",
      "       'S-ZORB.TC_5005.PV', 'S-ZORB.TE_5102.PV', 'S-ZORB.TE_5202.PV',\n",
      "       'S-ZORB.TE_9301.PV', 'S-ZORB.PT_9402.PV', 'S-ZORB.PT_9401.PV',\n",
      "       'S-ZORB.PDI_1102.PV', 'S-ZORB.TE_1601.PV', 'S-ZORB.TE_1201.PV',\n",
      "       'S-ZORB.LI_9102.DACA', 'S-ZORB.LT_3801.DACA', 'S-ZORB.PT_2502.DACA',\n",
      "       'S-ZORB.TE_5201.DACA', 'S-ZORB.TE_5101.DACA', 'S-ZORB.TE_6002.DACA',\n",
      "       'S-ZORB.LT_9101.DACA', 'S-ZORB.PDT_1003.DACA', 'S-ZORB.PDT_3502.DACA',\n",
      "       'S-ZORB.PDT_3002.DACA', 'S-ZORB.PT_2901.DACA', 'S-ZORB.FC_5001.DACA',\n",
      "       'S-ZORB.AT-0004.DACA.PV', 'S-ZORB.LC_5102.PIDA.PV',\n",
      "       'S-ZORB.CAL.SPEED.PV', 'S-ZORB.PC_1001A.PV'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "feature_list1 = []\n",
    "for i in range(30, 31):\n",
    "    # Create the RFE object and compute a cross-validated score.\n",
    "    RFR = RandomForestRegressor(random_state=111)\n",
    "    # The \"accuracy\" scoring is proportional to the number of correct\n",
    "    rfe = RFE(estimator=RFR, step=1, n_features_to_select=i)\n",
    "    rfe.fit_transform(X, y.astype(str))\n",
    "    \n",
    "    # 输出选择特征\n",
    "    print(X.columns[ rfe.get_support() ])\n",
    "    feature_list1.append(X.columns[ rfe.get_support() ])\n",
    "    # print(\"Optimal number of features : %d\" % rfe.n_features_)\n",
    "    \n",
    "    # # Plot number of features VS. cross-validation scores\n",
    "#     plt.figure()\n",
    "#     plt.xlabel(\"Number of features selected\")\n",
    "#     plt.ylabel(\"Cross validation score (nb of correct classifications)\")\n",
    "#     plt.plot(range(1, len(rfe.grid_scores_) + 1), rfe.grid_scores_)\n",
    "#     plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# def trainandTest(X_train, y_train, X_test):\n",
    "#     # XGBoost训练过程\n",
    "#     model = xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=160, silent=False, objective='reg:gamma')\n",
    "#     model.fit(X_train, y_train)\n",
    "\n",
    "#     # 对测试集进行预测\n",
    "#     ans = model.predict(X_test)\n",
    "\n",
    "#     ans_len = len(ans)\n",
    "#     id_list = np.arange(10441, 17441)\n",
    "#     data_arr = []\n",
    "#     for row in range(0, ans_len):\n",
    "#         data_arr.append([int(id_list[row]), ans[row]])\n",
    "#     np_data = np.array(data_arr)\n",
    "\n",
    "#     # 写入文件\n",
    "#     pd_data = pd.DataFrame(np_data, columns=['id', 'y'])\n",
    "#     # print(pd_data)\n",
    "#     pd_data.to_csv('submit.csv', index=None)\n",
    "\n",
    "#     # 显示重要特征\n",
    "#     # plot_importance(model)\n",
    "#     # plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBRegressor as XGBR\n",
    "from sklearn.ensemble import RandomForestRegressor as RFR\n",
    "from sklearn.linear_model import LinearRegression as LinearR\n",
    "from sklearn.datasets import load_boston\n",
    "from sklearn.model_selection import KFold, cross_val_score as CVS, train_test_split as TTS\n",
    "from sklearn.metrics import mean_squared_error as MSE\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.metrics import mean_absolute_error #平方绝对误差\n",
    "from sklearn.metrics import r2_score#R square\n",
    "from sklearn.neural_network import MLPRegressor\n",
    "from sklearn.tree import DecisionTreeRegressor \n",
    "from sklearn.ensemble import RandomForestRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.027904081632652657 0.167045148485829 0.12748979591836668 -0.001722423653408356\n",
      "0.02693341836734646 0.16411404073797725 0.12468367346938745 0.03312320113633771\n",
      "0.02943004081632596 0.17155186042805237 0.13646938775510106 -0.05650249317831535\n",
      "0.030087622448979282 0.17345784055204677 0.13694897959183613 -0.08010887003325706\n",
      "0.03411934693877516 0.18471423047176186 0.14624489795918322 -0.22484285126900483\n",
      "0.03090241836734654 0.1757908369834632 0.14196938775510143 -0.10935904758343495\n",
      "0.02902780612244859 0.17037548568514366 0.1377244897959177 -0.042062759316698894\n",
      "0.027417030612244493 0.16558088842690902 0.12698979591836712 0.015762112660276273\n",
      "0.03166232653061172 0.17793910905310198 0.13763265306122366 -0.13663882181435794\n",
      "0.028067704081632363 0.1675341877994828 0.1284795918367345 -0.007596269577234027\n",
      "0.02785779591836708 0.16690654845861225 0.12691836734693906 -6.082308525257041e-05\n"
     ]
    }
   ],
   "source": [
    "for i in range(len(feature_list)):\n",
    "    #Xtrain,Xtest,Ytrain,Ytest = TTS(X[ feature_list[i] ], y, test_size=0.2, random_state=111)\n",
    "    Xtrain,Xtest,Ytrain,Ytest = TTS(X, y, test_size=0.3, random_state=111)\n",
    "    forest_reg = RandomForestRegressor()\n",
    "    forest_reg.fit(Xtrain, Ytrain)\n",
    "    y_predict = forest_reg.predict(Xtest)\n",
    "    mse_score = MSE(Ytest,y_predict)\n",
    "    rmse_score = np.sqrt(mse_score)\n",
    "    mae_score = mean_absolute_error(Ytest,y_predict)\n",
    "    rr_score = r2_score(Ytest,y_predict)\n",
    "    print(mse_score, rmse_score, mae_score, rr_score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.08188153846153896 0.28614950368913616 0.23615384615384644 -2.146671772416953\n",
      "0.05621999999999991 0.23710757052443499 0.19400000000000092 -1.1605100535376027\n",
      "0.07634923076923167 0.27631364564427807 0.22076923076923294 -1.934067603286869\n",
      "0.06997846153846175 0.26453442410858696 0.20676923076923123 -1.6892417233180597\n",
      "0.06337384615384564 0.2517416257869279 0.2023076923076917 -1.4354292377575435\n",
      "0.06520615384615461 0.255354956572522 0.20061538461538514 -1.5058440223610257\n",
      "0.05880769230769266 0.24250297381205999 0.19676923076923192 -1.2599539390984726\n",
      "0.06743692307692309 0.259686201167723 0.20000000000000076 -1.5915715099134569\n",
      "0.07094153846153799 0.266348528176031 0.2113846153846156 -1.7262523489786123\n",
      "0.08698923076923103 0.29493936795421366 0.231846153846156 -2.342958157709472\n",
      "0.0777661538461537 0.2788658348492222 0.21907692307692433 -1.9885193384839428\n"
     ]
    }
   ],
   "source": [
    "for i in range(len(feature_list)):\n",
    "    Xtrain,Xtest,Ytrain,Ytest = TTS(X[ feature_list[i] ], y, test_size=0.2, random_state=111)\n",
    "    tree_reg = DecisionTreeRegressor()\n",
    "    tree_reg.fit(Xtrain,Ytrain)\n",
    "    y_predict = tree_reg.predict(Xtest)\n",
    "    mse_score = MSE(Ytest,y_predict)\n",
    "    rmse_score = np.sqrt(mse_score)\n",
    "    mae_score = mean_absolute_error(Ytest,y_predict)\n",
    "    rr_score = r2_score(Ytest,y_predict)\n",
    "    print(mse_score, rmse_score, mae_score, rr_score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9993392353617112 0.9996695630865787 0.7602443724882055 -34.87505706430637\n",
      "0.6709943801018955 0.8191424663035701 0.8019337077426353 -23.087878094040327\n",
      "3.8097560965798376 1.9518596508406636 1.5115706717131967 -135.7655872296669\n",
      "0.37785666159390063 0.6147004649371112 0.2845358198660549 -12.564592299733953\n",
      "0.09155774321474405 0.30258510078115886 0.22431979837587265 -2.286811071036529\n",
      "3.5809982778604157 1.892352577576498 1.1017845952297536 -127.5534611466806\n",
      "1.8229328538983423 1.3501603067407746 1.2184206692522714 -64.44106129719916\n",
      "1.695683385254761 1.3021840827067275 1.1399891093204078 -59.872960909007354\n",
      "5.932253390525592 2.4356217667210958 1.8410141729822496 -211.9606457691019\n",
      "0.6799430522355047 0.8245865947464248 0.8075190094426147 -23.409124485739138\n",
      "16.140831529212004 4.017565373358846 2.6057529662681067 -578.4361230761118\n"
     ]
    }
   ],
   "source": [
    "for i in range(len(feature_list)):\n",
    "    Xtrain,Xtest,Ytrain,Ytest = TTS(X[ feature_list[i] ], y, test_size=0.3, random_state=111)\n",
    "    model = MLPRegressor(hidden_layer_sizes=(10,), random_state=111,learning_rate_init=0.1)  # BP神经网络回归模型\n",
    "    model.fit(Xtrain,Ytrain)  # 训练模型\n",
    "    y_predict = model.predict(Xtest)  # 模型预测\n",
    "#     np.abs(data_te.iloc[:,2]-pre).mean()  # 模型评价\n",
    "    mse_score = MSE(Ytest,y_predict)\n",
    "    rmse_score = np.sqrt(mse_score)\n",
    "    mae_score = mean_absolute_error(Ytest,y_predict)\n",
    "    rr_score = r2_score(Ytest,y_predict)\n",
    "    print(mse_score, rmse_score, mae_score, rr_score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.03392416071092257 0.18418512619351915 0.14371094173314616 -0.21783590426382315\n",
      "0.035657715382477494 0.1888325061594997 0.14714497140475657 -0.28006839806120487\n",
      "0.03577279609795498 0.18913697707734198 0.15027796353612619 -0.2841996550845136\n",
      "0.03338479233979752 0.18271505778068078 0.1412256585821813 -0.19847323900652492\n",
      "0.03418152496988088 0.18488246258063765 0.14636071494647457 -0.22707496658593884\n",
      "0.035275657726586127 0.18781815068460803 0.14848226437763232 -0.26635299520103684\n",
      "0.03492883570216204 0.18689257797505507 0.14850032404977376 -0.25390250844228524\n",
      "0.04043916161023206 0.20109490697238472 0.16095001648883386 -0.4517164733101673\n",
      "0.03982875798128419 0.19957143578499453 0.15973009418468023 -0.429803729122916\n",
      "0.03954296975409132 0.19885414190831258 0.15600477238090626 -0.4195442810835919\n",
      "0.036788037366288995 0.19180207862869733 0.14942860705511846 -0.3206455756955846\n"
     ]
    }
   ],
   "source": [
    "for i in range(len(feature_list)):\n",
    "    Xtrain,Xtest,Ytrain,Ytest = TTS(X[ feature_list[i] ], y, test_size=0.3, random_state=111)\n",
    "    #Xtrain,Xtest,Ytrain,Ytest = TTS(X, y, test_size=0.3, random_state=111)\n",
    "    reg = XGBR(max_depth=5, learning_rate=0.1, n_estimators=160, objective='reg:gamma').fit(Xtrain,Ytrain)\n",
    "    \n",
    "    \n",
    "    y_predict = reg.predict(Xtest)\n",
    "    \n",
    "    \n",
    "\n",
    "    #调用\n",
    "    mse_score = MSE(Ytest,y_predict)\n",
    "    rmse_score = np.sqrt(mse_score)\n",
    "    mae_score = mean_absolute_error(Ytest,y_predict)\n",
    "    rr_score = r2_score(Ytest,y_predict)\n",
    "    print(mse_score, rmse_score, mae_score, rr_score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "\n",
    "\n",
    "data_x, data_y = data_325[ X.columns[ rfe.get_support() ] ], y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
